/**
 * Pptx 主函数构造函数相关参数
 */

import { Delta } from "quill/core";
import { EventBusMap } from "./EventBusMap";
import { IYjsWebsocket } from "./Websocket";
import { EventBus } from "../Event/eventbus/EventBus";

/** () => void */
export type VoidFun = () => void;

/** 可遍历对象 */
export type IKeyMap<T extends string | number | symbol, V> = {
  [key in T]: V;
};

/** 导出 PPtx 构造函数参数对象 */
export interface IPptxOptions {
  container: Element | HTMLElement | string; // 选择器
  width?: number; // konva 宽度
  height?: number; // konva 高度
  websocket?: IYjsWebsocket;
}

/** 导出 Draw 构造函数参数对象 */
export type IDrawOptions = IPptxOptions & {
  eventbus: EventBus<EventBusMap>;
};

/** Draw.render 重要参数 */
export type IRender = {
  redraw?: boolean; // 是否重新渲染
  cacheLayer?: boolean; // 是否重新缓存 layer
  layerImage?: boolean; // 是否重新获取 layerImage
  patchHistory?: boolean; // 是否记录历史操作
};

/** dialog 弹窗信息 */
export interface IDialogInfo {
  width?: number; // 宽度
  height?: number; // 高度
  title?: string; // 标题
  content: string; // 内容

  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  onConfirm?: (data?: any) => void; // 确认按钮回调
  onCancel?: () => void; // 取消按钮回调
  onClose?: () => void; // 关闭按钮回调

  // 拓展其他属性数据 以达到双击修改参数时，能传递到 dialog 组件内
  delta?: Delta;
}

/** 背景图层管理器参数 */
export interface IBackgroundLayerOptions {
  global?: boolean; // 是否应用全部 - 特指背景颜色等属性是否应用到全局
  grid?: boolean; // 是否添加网格
  gridColor?: string; // 网格颜色
  ruler?: boolean; // 是否添加标尺
  bgType?: "fill" | "image"; // 背景类型
  fill?: string; // 背景填充颜色
  stroke?: string; // 背景边框颜色
  image?: string; // 背景图片
}
